#ifndef DEVICE_STATE_MANAGER_H
#define DEVICE_STATE_MANAGER_H

#include <stdbool.h>
#include <stdint.h>

// 系统状态文件路径
#define STATE_FILE_PATH "/tmp/smart_home_state.conf"

// 设备状态数据结构
typedef struct {
    // 空调状态
    bool ac_power;
    int ac_temperature;   // 温度 16-30度
    int ac_mode;         // 模式：0-制冷, 1-制热, 2-送风, 3-除湿
    int ac_fan_speed;    // 风速：0-自动, 1-低, 2-中, 3-高
    
    // 音乐播放器状态
    bool music_playing;
    int music_volume;    // 音量 0-100
    int current_song_index; // 当前歌曲索引
    
    // 灯光状态
    bool light1_state;
    bool light2_state;
    bool light3_state;
    bool light4_state;
    
    // 窗帘状态
    int curtain_position;  // 位置 0-100
    bool curtain_auto;     // 自动控制开关
    
    // 烟雾监控状态
    uint32_t smoke_concentration;  // 烟雾浓度值
    bool smoke_alarm_active;       // 警报是否激活
    bool buzzer_enabled;           // 蜂鸣器是否启用
    
    // 呼叫触发器状态
    bool dad_call_triggered;       // 爸爸呼叫是否已触发
    bool mom_call_triggered;       // 妈妈呼叫是否已触发
    bool son_call_triggered;       // 儿子呼叫是否已触发
    bool daughter_call_triggered;  // 女儿呼叫是否已触发
    
    // 状态标记
    bool state_restored;   // 是否已经恢复过状态（防止重复恢复）
} device_state_t;

// 函数声明

/**
 * @brief 初始化设备状态管理器
 * @note 在程序启动时调用一次
 */
void device_state_manager_init(void);

/**
 * @brief 保存所有设备状态到文件
 * @return true 保存成功，false 保存失败
 * @note 在关机前调用
 */
bool save_device_states(void);

/**
 * @brief 从文件恢复所有设备状态
 * @return true 恢复成功，false 恢复失败或文件不存在
 * @note 在开机时调用一次
 */
bool restore_device_states(void);

/**
 * @brief 检查是否已经恢复过状态
 * @return true 已恢复，false 未恢复
 */
bool is_state_restored(void);

/**
 * @brief 清除状态文件
 * @note 可选，在需要重置所有状态时调用
 */
void clear_saved_states(void);

/**
 * @brief 获取当前设备状态
 * @return 当前设备状态的拷贝
 */
device_state_t get_current_device_states(void);

/**
 * @brief 打印当前设备状态（调试用）
 */
void print_device_states(void);

/**
 * @brief 更新烟雾监控状态
 * @param concentration 烟雾浓度值
 * @param alarm_active 警报是否激活
 * @param buzzer_enabled 蜂鸣器是否启用
 */
void update_smoke_monitor_state(uint32_t concentration, bool alarm_active, bool buzzer_enabled);

/**
 * @brief 获取烟雾监控状态
 * @param concentration 返回烟雾浓度值
 * @param alarm_active 返回警报是否激活
 * @param buzzer_enabled 返回蜂鸣器是否启用
 */
void get_smoke_monitor_state(uint32_t *concentration, bool *alarm_active, bool *buzzer_enabled);

/**
 * @brief 更新爸爸呼叫触发器状态
 * @param triggered 是否已触发
 */
void update_dad_call_triggered(bool triggered);

/**
 * @brief 更新妈妈呼叫触发器状态
 * @param triggered 是否已触发
 */
void update_mom_call_triggered(bool triggered);

/**
 * @brief 更新儿子呼叫触发器状态
 * @param triggered 是否已触发
 */
void update_son_call_triggered(bool triggered);

/**
 * @brief 更新女儿呼叫触发器状态
 * @param triggered 是否已触发
 */
void update_daughter_call_triggered(bool triggered);

#endif /* DEVICE_STATE_MANAGER_H */
